<?php
/*
 * 
 *  nginx  502 Bad Gateway
 *  
 *  
 *  
 *  参考 http://blog.chinaunix.net/uid-24500107-id-2602885.html
 *  
 *  
一、错误提示说明：

Nginx 502 Bad Gateway的含义是请求的PHP-CGI已经执行，但是由于某种原因（一般是读取资源的问题）没有执行完毕而导致PHP-CGI进程终止。

Nginx 504 Gateway Time-out的含义是所请求的网关没有请求到，简单来说就是没有请求到可以执行的PHP-CGI。



1. 检查   PHP-CGI进程  

	netstat -anpo | grep "php-cgi" | wc -l
    
             如果为0 说明 php-cgi未启动 
             
    a) 启动 /usr/local/php/sbin/php-fpm  start  
    
	b) 检查  php 5.3的话/usr/local/php/var/log/php-fpm.log  查看日志
	
	
		如果含有 fpm_children_bury() 等错误， 大概是 php线程打开文件句柄受限导致的错误
		
		
		1、提升服务器的文件句柄打开打开
		/etc/security/limits.conf : 
		* soft nofile 51200
		* hard nofile 51200
		2、提升nginx的进程文件打开数
		nginx.conf : worker_rlimit_nofile 51200;
		3、修改php-fpm.conf文件，主要需要修改2处。
		命令 ulimit -n 查看限制的打开文件数，php-fpm.conf 中的选项rlimit_files 确保和此数值一致。
		 <value name="max_requests">10240</value>
		<value name="rlimit_files">51200</value>
		4、# vi /etc/sysctl.conf 
		底部添加
		fs.file-max=51200
		
		完成以上修改，重启PHP，警告信息再也没了。
		
（**** 好像还是有  未解决）
		
		四、终级解决方案：

		标题3中所示的解决方案只能临时解决问题，而如果网站的访问量确实非常非常大，而Nginx+FastCGI只能对处理瞬间或短时间内的高并发有很好的效果，所以目前唯一的终极解决方案是：定时平滑重启php-cgi。
		
		具体配置如下：
		
		1、写一个非常简单的脚本：
		
		#vi /home/www/scripts/php-fpm.sh
		
		内容如下：  （php-fpm.sh的权限必须是可执行权限 如777）
		
		#!/bin/bash
		# This script run at */1
		/usr/local/php/sbin/php-fpm reload
		
		2、将脚本添加至计划任务：
		
		#crontab -e
		
		内容如下：
		
		*/1 * * * * /home/www/scripts/php-fpm.sh
		
		注：为了省事起见，也可以不写脚本，直接在crontab里写入php-fpm的平滑重启命令。 
		
		(可以每天早上重启  )
    
    
2. 服务器容量不够也会导致502错误
		
		 
		 
		 